// import axios from "axios";
// import type {
//   CreateAxiosDefaults,
//   AxiosInstance,
//   AxiosRequestConfig,
//   InternalAxiosRequestConfig,
//   AxiosHeaders,
// } from "axios";
// // import { settle } from "axios/lib/core/settle";
// // import { buildURL } from "axios/lib/helpers/buildURL";
// const axiosConfig: CreateAxiosDefaults = {
//   baseURL: "http://localhost:7070/",
//   timeout: 10000,
//   headers: { "X-Custom-Header": "foobar" },
// };
// // axios.defaults.adapter = function (config: any) {
// //   return new Promise((resolve, reject) => {
// //     // const settle = require("axios/lib/core/settle.js");
// //     // const buildURL = require("axios/lib/helpers/buildURL.js");
// //     uni.request({
// //       method: config.method.toUpperCase(),
// //       url:
// //         config.baseURL +
// //         buildURL(config.url, config.params, config.paramsSerializer),
// //       header: config.headers,
// //       data: config.data,
// //       dataType: config.dataType,
// //       responseType: config.responseType,
// //       sslVerify: config.sslVerify,
// //       complete: function complete(response: any) {
// //         response = {
// //           data: response.data,
// //           status: response.statusCode,
// //           errMsg: response.errMsg,
// //           header: response.header,
// //           config: config,
// //         };

// //         settle(resolve, reject, response);
// //       },
// //     });
// //   });
// // };
// const instance: AxiosInstance = axios.create(axiosConfig);

// instance.interceptors.request.use(
//   (config: InternalAxiosRequestConfig) => {
//     console.log(window);
//     const userInfo = uni.getStorageSync("userInfo");
//     if (userInfo) {
//       config = {
//         headers: {
//           Authorization: "Bearer " + userInfo.token,
//         },
//       };
//     }
//     return config;
//   },
//   (error) => {
//     return Promise.reject(error);
//   }
// );

// instance.interceptors.response.use(
//   function (response) {
//     console.log(response, "ddd");
//     return response.data;
//   },
//   function (error) {
//     if (error.response.status === 401) {
//       uni.removeStorageSync("userInfo");
//       uni.navigateTo({ url: "/pages/login/login" });
//     }
//     // return Promise.reject(error);
//   }
// );

// type postConfig = {
//   url: string;
//   data?: any;
//   params?: any;
//   config?: AxiosRequestConfig<any> | undefined;
// };

// export const post = function <T>(config: postConfig) {
//   return new Promise((resolve, inject) => {
//     return instance
//       .post(config.url, config.data)
//       .then((res) => {
//         return resolve(res as T);
//       })
//       .catch((err) => {
//         inject(err);
//       });
//   }) as Promise<T>;
// };

// export const get = function <T>(config: postConfig) {
//   return new Promise((resolve, inject) => {
//     return instance
//       .get(config.url, config)
//       .then((res) => {
//         return resolve(res as T);
//       })
//       .catch((err) => {
//         inject(err);
//       });
//   }) as Promise<T>;
// };

// export default instance;

class Request {
  private timeout: number;
  private baseUrl: string;
  private headers: any;
  constructor() {
    this.timeout = 4000;
    this.baseUrl = "http://localhost:3030";
    // this.headers = {};
    this.reqInterceptors = this.reqInterceptors.bind(this);
    this.fetch = this.fetch.bind(this);
  }
  reqInterceptors() {
    const userInfo = uni.getStorageSync("userInfo");
    if (userInfo) {
      this.headers = {
        Authorization: "Bearer " + userInfo.token,
      };
    }
    console.log(1);
  }
  resInterceptors(res: any) {
    if (res.data.code == 401) {
      window.localStorage.clear();
      uni.navigateTo({ url: "/pages/login/login" });
      return;
    }
    if (res.data.code == 400) {
      uni.showToast({
        title: res.data.message,
        duration: 2000,
        icon: "none",
      });
      return;
    }
    return res.data;
  }
  fetch<T>(options: any): Promise<T> {
    this.reqInterceptors();
    return new Promise((resolve) => {
      return uni.request({
        method: options.method || "GET",
        timeout: this.timeout,
        url: options.url,
        data: options.data,
        header: this.headers,
        success: (res) => {
          resolve(this.resInterceptors(res));
        },
        fail: (err) => {
          console.log(err, "99999");
        },
      });
    });
  }
}

const { fetch } = new Request();
export default fetch;
